/*
 *    Copyright (c) 2006 ThoughtWorks, Inc.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.thoughtworks.turtlemock.internal;

import com.thoughtworks.turtlemock.constraint.Constraint;

public interface InvokeMethodResultLog extends RollbackableInvokeLog {
    InvokeWithArgsResultLog with(Object param);

    InvokeWithArgsResultLog with(Object param1, Object param2);

    InvokeWithArgsResultLog with(Object param1, Object param2, Object param3);

    InvokeWithArgsResultLog with(Object param1, Object param2, Object param3, Object param4);

    InvokeWithArgsResultLog withArgs(Object[] args);

    String getOperationName();

    InvokeWithArgsResultLog withAllArgsConstraint(Constraint c);

    InvokeMethodResultLog inAnotherThread();

    InvokeWithArgsResultLog withFirstArgConstraint(Constraint constraint);

    InvokeWithArgsResultLog withArgsConstraint(Constraint[] constrains);

    InvokeWithArgsResultLog withArgConstraint(Constraint constraint, int paramIndex);

    InvokeWithArgsResultLog noArgs();

    InvokeMethodResultLog then(String operationName);
}
